home *** CD-ROM | disk | FTP | other *** search
- unit TimeZoneU;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls;
-
- type
- TTimeZoneInfoForm = class(TForm)
- lblCurrent: TLabel;
- lblBias: TLabel;
- lblStdBias: TLabel;
- lblDayBias: TLabel;
- lblDayToStd: TLabel;
- lblStdToDay: TLabel;
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- TimeZoneInfoForm: TTimeZoneInfoForm;
-
- implementation
-
- {$R *.DFM}
-
- procedure TTimeZoneInfoForm.FormCreate(Sender: TObject);
- var
- RetVal: DWord;
- TZI: TTimeZoneInformation;
- StdBias, DayBias: Integer;
- StdName, DayName: String;
- const
- OrdNums: array[1..5] of String = ('1st', '2nd', '3rd', '4th', 'last');
- MinsPerDay = SecsPerDay / 60;
- begin
- RetVal := GetTimeZoneInformation(TZI);
- if RetVal = $FFFFFFFF then //API call failed
- RaiseLastWin32Error;
- if TZI.StandardName[0] = #0 then //No name information
- StdName := 'standard time'
- else
- StdName := TZI.StandardName;
- if TZI.DaylightName[0] = #0 then //No name information
- DayName := 'daylight time'
- else
- DayName := TZI.DaylightName;
- case RetVal of
- TIME_ZONE_ID_UNKNOWN: lblCurrent.Caption := Format(lblCurrent.Caption, ['unknown time frame']);
- TIME_ZONE_ID_STANDARD: lblCurrent.Caption := Format(lblCurrent.Caption, [StdName]);
- TIME_ZONE_ID_DAYLIGHT: lblCurrent.Caption := Format(lblCurrent.Caption, [DayName]);
- end;
- lblBias.Caption := Format(lblBias.Caption, [TZI.Bias]);
- StdBias := TZI.Bias + TZI.StandardBias;
- lblStdBias.Caption := Format(lblStdBias.Caption, [StdBias, StdName]);
- DayBias := TZI.Bias + TZI.DaylightBias;
- lblDayBias.Caption := Format(lblDayBias.Caption, [DayBias, DayName]);
- lblDayToStd.Caption := Format(lblDayToStd.Caption, [DayName, StdName]);
- lblStdToDay.Caption := Format(lblStdToDay.Caption, [StdName, DayName]);
- if TZI.StandardDate.wMonth = 0 then
- begin
- lblDayToStd.Caption := lblDayToStd.Caption + 'an unspecified point';
- lblStdToDay.Caption := lblStdToDay.Caption + 'an unspecified point';
- Exit;
- end;
- if TZI.StandardDate.wYear = 0 then //"Day of month" date
- with TZI.StandardDate do
- lblDayToStd.Caption := Format('%s%s on the %s %s of %s', [lblDayToStd.Caption,
- TimeToStr(EncodeTime(wHour, wMinute, wSecond, wMilliseconds) + DayBias / MinsPerDay),
- OrdNums[wDay], LongDayNames[wDayOfWeek + 1], LongMonthNames[wMonth + 1]])
- else //Absolute date
- lblDayToStd.Caption := lblDayToStd.Caption +
- DateTimeToStr(SystemTimeToDateTime(TZI.StandardDate) + DayBias / MinsPerDay);
- if TZI.DaylightDate.wYear = 0 then //"Day of month" date
- with TZI.DaylightDate do
- lblStdToDay.Caption := Format('%s%s on the %s %s of %s', [lblStdToDay.Caption,
- TimeToStr(EncodeTime(wHour, wMinute, wSecond, wMilliseconds) + StdBias / MinsPerDay),
- OrdNums[wDay], LongDayNames[wDayOfWeek + 1], LongMonthNames[wMonth + 1]])
- else //Absolute date
- lblStdToDay.Caption := lblStdToDay.Caption +
- DateTimeToStr(SystemTimeToDateTime(TZI.DaylightDate) + StdBias / MinsPerDay)
- end;
-
- end.
-